home *** CD-ROM | disk | FTP | other *** search
/ Atari Forever 4 / Atari Forever 4.zip / Atari Forever 4.iso / PD_THEMA / CPX / GEMSOUND / SOURCE / COOKIE.C next >
C/C++ Source or Header  |  1998-03-14  |  2KB  |  82 lines

  1. /*  COOKIE.C
  2.  *  Cookie-Routinen
  3.  *
  4.  *  aus: GEM Sound
  5.  *       TOS Magazin
  6.  *
  7.  *  (c)1992 by Richard Kurz
  8.  *  Vogelherdbogen 62
  9.  *  7992 Tettnang
  10.  *  Fido 2:241/7232
  11.  *
  12.  *  Erstellt mit Pure C
  13.  */
  14.  
  15. #include <stdio.h>
  16. #include <tos.h>
  17. #include "sounds.h"
  18.  
  19. int get_cookie(unsigned long cookie,unsigned long *value)
  20. {
  21.     long old_stack;
  22.     long *jar;
  23.     
  24.     old_stack=Super(0L);
  25.     jar=*((long **)0x5a0L);
  26.     Super((void *) old_stack);
  27.     
  28.     if(!jar) return(FALSE);
  29.     do
  30.     {
  31.         if(*jar==cookie)
  32.         {
  33.             if(value) *value=jar[1];
  34.             return(TRUE);
  35.         }
  36.         else
  37.             jar= &(jar[2]);
  38.     }while(jar[0]);
  39.     return(FALSE);
  40. } /* get_cookie */
  41.  
  42. int make_cookie(unsigned long cookie,unsigned long value)
  43. {
  44.     long old_stack;
  45.     long nr,new;
  46.     long *jar,*ajar,*njar;
  47.         
  48.     old_stack=Super(0L);
  49.     jar=*((long **)0x5a0L);
  50.     Super((void *) old_stack);
  51.     ajar=jar;
  52.     for(nr=0;jar[0];nr++,jar=&(jar[2]));
  53.     if(nr<jar[1])
  54.     {
  55.         jar[2]=jar[0];
  56.         jar[3]=jar[1];
  57.         
  58.         jar[0]=cookie;
  59.         jar[1]=value;
  60.         return(TRUE);
  61.     }
  62.     new=nr+20;
  63.     jar=njar=Malloc((new+2L)*8L);
  64.     if(njar==NULL)  return(FALSE);
  65.     do
  66.     {
  67.         jar[0]=ajar[0];
  68.         jar[1]=ajar[1];
  69.         jar=&(jar[2]);
  70.         ajar=&(ajar[2]);
  71.     } while(ajar[0]);
  72.     jar[0]=cookie;
  73.     jar[1]=value;
  74.     jar[2]=0L;
  75.     jar[3]=new;
  76.     old_stack=Super(0L);
  77.     jar=(long *)0x5a0L;
  78.     *jar=(long) njar;
  79.     Super((void *) old_stack);
  80.     return(TRUE);
  81. } /* make_cookie */
  82.